<?php
/**
 * Created by PhpStorm.
 * User: 93933
 * Date: 2021/11/25
 * Time: 17:51
 */

namespace catchAdmin\customs\controller;

use catcher\base\CatchRequest as Request;
use catcher\CatchResponse;
use think\Response;
use think\facade\Db;
use catcher\Code;
use catchAdmin\customs\model\Order as OrderModel;
use catchAdmin\customs\model\OrderSon as OrderSonModel;

/**
 * 泰州海关
 * @time 2021/11/03 14:02
 */
class Taizhou
{
    protected $orderModel;
    protected $OrderSonModel;

    /**
     *
     * @time 2021/11/03 14:02
     * @param OrderModel $orderModel
     * @param OrderSonModel $OrderSonModel
     * @return mixed
     */
    public function __construct(OrderModel $orderModel, OrderSonModel $OrderSonModel)
    {
        $this->orderModel = $orderModel;
        $this->OrderSonModel = $OrderSonModel;
    }

    /**
     * 订单申报/变更
     * @time 2021/11/08 11:25
     * @return Response
     */
    public function pushOrders(Request $request)
    {
        try {
            $orders = $request->post('orders');
            $type = $request->post('type');//1:申报 2：变更
            $success = 0;
            foreach ($orders as $key => $value) {
                $res = $this->pushOrder($value, $type);
                if($res['status'] === 1){
                    $success++;
                }
            }
            return CatchResponse::success([], '已成功推送' . $success . '项', 10000);


            return CatchResponse::success([], $res['msg'], 10000);

        } catch (\Exception $exception) {

            return CatchResponse::fail($exception->getMessage(), Code::FAILED);

        }
    }

    /**
     * 清单申报/变更
     * @time 2021/11/08 11:25
     * @return Response
     */
    public function pushClearOrders(Request $request)
    {
        try {
            $orders = $request->post('orders');
            $type = $request->post('type');//1:申报 2：变更
            $success = 0;
            foreach ($orders as $key => $value) {
                $res = $this->pushClearOrder($value, $type);
                if($res['status'] === 1){
                    $success++;
                }
            }
            return CatchResponse::success([], '已成功推送' . $success . '项', 10000);

        } catch (\Exception $exception) {

            return CatchResponse::fail($exception->getMessage(), Code::FAILED);

        }
    }

    /**
     * 订单信息
     * @time 2021/11/08 11:25
     * @return Response
     */
    public function pushOrder($orderId, $type)
    {
        $orderArr = [];
        $appTime = date('YmdHis');
        // $ebcCode = '3201968B31';//电商企业代码
        // $ebcName = '南京龙潭跨境贸易产业服务有限公司';//电商企业名称
        $ebcCode = '3201960H68';//报文传输的企业代码（需要与接入客户端的企业身份一致）
        $ebcName = '南京东九区供应链管理有限公司';//报文传输的企业名称（需要与接入客户端的企业身份一致）
        //查询订单信息
        $guid = strtoupper(md5(time(), false)) . rand(1000, 9999);//唯一id  36位
        //主单数据
        $orderInfo = Db::table('db_customs_order')->field('orderId,userId,amount,distributionfee,tax,realPayment,contactAddr,detailAddr,contactName,payOrderNo,buyerName,ConsigneeCode,contactMobile,snum,NetWeight,ebpCode,ebpName,paycomCode,paycomName,task_no,discount')->where(['orderId' => $orderId])->find();
        $ordersonInfo = Db::table('db_customs_orderlist')->field('productId,productName,barcode,num,weight,price,business_addr,GModel,Unit,spec_qty')->where(['orderId' => $orderId])->select();
        if ($orderInfo && $ordersonInfo) {
            $orderlist = [];
            $orderlist['guid'] = $guid;//唯一id机器码
            $orderlist['appType'] = $type;//报送类型（1-新增 2-变更 3-删除。默认为1）;
            $orderlist['appTime'] = $appTime;//报送时间（格式:YYYYMMDDhhmmss）\n
            $orderlist['appStatus'] = 2;//业务状态（业务状态:1-暂存,2-申报,默认为1。）
            $orderlist['orderType'] = 'I';//订单类型(电子订单类型：I进口)
            $orderlist['orderNo'] = $orderInfo['orderId'];//订单编号
            $orderlist['ebpCode'] = $orderInfo['ebpCode'];//电商平台代码(电商平台的海关注册登记编号或统一社会信用代码。）
            $orderlist['ebpName'] = $orderInfo['ebpName'];//电商平台名称(电商平台的登记名称)
            $orderlist['ebcCode'] = $ebcCode;//电商企业代码（电商企业的海关注册登记编号。）
            $orderlist['ebcName'] = $ebcName;//电商企业名称（电商企业的海关注册登记名称。）

            $orderlist['goodsValue'] = $orderInfo['amount'];//商品价格(商品实际成交价，含非现金抵扣金额,精确到小数点后两位)
            $orderlist['freight'] = $orderInfo['distributionfee'];//运杂费(不包含在商品价格中的运杂费，无则填写"0",精确到小数点后两位)
            $orderlist['discount'] = $orderInfo['discount'];//非现金抵扣金额(使用积分、虚拟货币、代金券等非现金支付金额，无则填写"0",精确到小数点后两位)
            $orderlist['taxTotal'] = $orderInfo['tax'];//代扣税款(企业预先代扣的税款金额，无则填写“0”,精确到小数点后两位)
            $orderlist['acturalPaid'] = $orderInfo['realPayment'];//实际支付
            $orderlist['currency'] = 142;//币制（限定为人民币，填写“142”。）
            $orderlist['buyerRegNo'] = $orderInfo['contactMobile'];//订购人注册号(订购人的交易平台注册号。)
            $orderlist['buyerName'] = $orderInfo['buyerName'];//订购人姓名（订购人的真实姓名。）

            $orderlist['buyerIdType'] = 1;//订购人证件类型（1-身份证,2-其它。限定为身份证，填写“1”。）
            $orderlist['buyerIdNumber'] = $orderInfo['ConsigneeCode'];//订购人证件号码（订购人的身份证件号码。）
            $orderlist['buyerTelephone'] = $orderInfo['contactMobile'];//订购人电话

            $orderlist['payCode'] = $orderInfo['paycomCode'];//支付企业代码(支付企业的海关注册登记编号。)
            $orderlist['payName'] = $orderInfo['paycomName'];//支付企业名称(支付企业在海关注册登记的企业名称)
            $orderlist['payTransactionId'] = $orderInfo['payOrderNo'];//支付交易编号(支付企业唯一的支付流水号)
            $orderlist['batchNumbers'] = $orderInfo['task_no'];//商品批次号
            $orderlist['consignee'] = $orderInfo['contactName'];//收货人姓名(收货人姓名，必须与电子运单的收货人姓名一致。)
            $orderlist['consigneeTelephone'] = $orderInfo['contactMobile'];//收货人电话(收货人联系电话，必须与电子运单的收货人电话一致)
            $orderlist['consigneeAddress'] = $orderInfo['contactAddr'] . $orderInfo['detailAddr'];//收货地址(收货地址，必须与电子运单的收货地址一致)
            //$orderlist['consigneeDistrict'] = '';//收货地址行政区划代码(参照国家统计局公布的国家行政区划标准填制)
            $orderlist['note'] = '备注';//备注

            $orderlistArr = [];
            foreach ($ordersonInfo as $k => $v) {
                $v['num'] = (int)($v['num'] * $v['spec_qty']);
                $v['price'] = round($v['price'] / $v['spec_qty'], 2);

                $orderson = [];
                $orderson['gnum'] = $k + 1;//商品序号（从1开始的递增序号。）
                $orderson['itemNo'] = $v['barcode'];//企业商品货号（电商企业自定义的商品货号（SKU））
                $orderson['itemName'] = $v['productName'];//企业商品品名称（交易平台销售商品的中文名称）
                $orderson['gmodel'] = $v['GModel'];//商品规格型号
                $orderson['itemDescribe'] = $v['productName'];//企业商品描述（交易平台销售商品的描述信息）
                $orderson['barCode'] = $v['barcode'];//条形码（国际通用的商品条形码，一般由前缀部分、制造厂商代码、商品代码和校验码组成）
                $orderson['unit'] = $v['Unit'];//单位（海关标准的参数代码 《JGS-20海关业务代码集》- 计量单位代码）
                $orderson['qty'] = $v['num'];//数量（按成交计量单位的实际数量，精确到小数点后两位）
                $orderson['price'] = $v['price'];//单价（成交单价，精确到小数点后两位）

                $orderson['totalPrice'] = $v['num'] * $v['price'];//总价（成交总价，精确到小数点后两位）
                $orderson['currency'] = 142;//币制（限定为人民币，填写“142”。）
                $orderson['country'] = $v['business_addr'];//原产国（地区）（海关标准的参数代码 《JGS-20海关业务代码集》 国家（地区）代码表填写代码。
                $orderson['note'] = '备注';//备注
                $orderlistArr[] = $orderson;
            }
            $orderlist['orderlist'] = $orderlistArr;//子订单信息
            $orderArr[] = $orderlist;

        } else {
            return ['status' => 0, 'msg' => '订单' . $orderId . '信息已失效'];
        }

        return $this->orderXml($orderArr, $orderId);

    }

    //海关清单
    public function pushClearOrder($orderId, $type)
    {
        $orderArr = [];
        $appTime = date('YmdHis');
        $pushDate = date('Ymd');
        // $ebcCode = '3201968B31';//电商企业代码
        // $ebcName = '南京龙潭跨境贸易产业服务有限公司';//电商企业名称
        $ebcCode = '3201960H68';//报文传输的企业代码（需要与接入客户端的企业身份一致）
        $ebcName = '南京东九区供应链管理有限公司';//报文传输的企业名称（需要与接入客户端的企业身份一致）
        //$logisticsCode = '3201981249';//物流企业代码
        //$logisticsName = '江苏时进国际物流有限公司';//物流企业名称
        $logisticsCode = '321298Z005';//物流企业代码
        $logisticsName = '中国邮政速递物流股份有限公司泰州市分公司';//物流企业名称
        $guid = strtoupper(md5(time(), false)) . rand(1000, 9999);//唯一id  36位
        //主单数据
        $orderInfo =  Db::table('db_customs_order')->field('orderId,userId,amount,distributionfee,tax,realPayment,contactAddr,detailAddr,contactName,payOrderNo,buyerName,ConsigneeCode,contactMobile,snum,NetWeight,ebpCode,ebpName,paycomCode,paycomName,task_no,flight_no,rough_weight,NetWeight,express_no,clear_guid')->where(['orderId' => $orderId, 'deleteStatus' => 0, 'status' => 0])->find();
        $ordersonInfo =  Db::table('db_customs_orderlist')->field('productId,productName,barcode,num,weight,price,GCode,GModel,Unit,Unit1,Unit2,Qty,Qty1,Qty2,business_addr,RecordMaterialNo,rough_weight,spec_qty')->where(['orderId' => $orderId, 'deleteStatus' => 0])->select();
        if ($orderInfo && $ordersonInfo) {
            $orderlist = [];
            $orderlist['guid'] = $guid;//唯一id机器码
            $orderlist['appType'] = $type;//报送类型（1-新增 2-变更 3-删除。默认为1）;
            $orderlist['appTime'] = $appTime;//报送时间（格式:YYYYMMDDhhmmss）\n
            $orderlist['appStatus'] = 2;//业务状态（业务状态:1-暂存,2-申报,默认为1。）
            $orderlist['orderNo'] = $orderInfo['orderId'];//订单编号
            $orderlist['ebpCode'] = $orderInfo['ebpCode'];//电商平台代码(电商平台的海关注册登记编号或统一社会信用代码。）
            $orderlist['ebpName'] = $orderInfo['ebpName'];//电商平台名称(电商平台的登记名称)
            // $orderlist['ebcCode'] = $ebcCode;//电商企业代码（电商企业的海关注册登记编号。）
            // $orderlist['ebcName'] = $ebcName;//电商企业名称（电商企业的海关注册登记名称。）
            $orderlist['ebcCode'] = $ebcCode;//电商企业代码（电商企业的海关注册登记编号。）
            $orderlist['ebcName'] = $ebcName;//电商企业名称（电商企业的海关注册登记名称。）
            $orderlist['logisticsNo'] = $orderInfo['express_no'];//物流运单编号
            $orderlist['logisticsCode'] = $logisticsCode;//物流企业代码（物流企业的海关注册登记编号。）
            $orderlist['logisticsName'] = $logisticsName;//物流企业名称（物流企业的海关注册登记名称。）
            $orderlist['copNo'] = date('YmdHis') . rand(1000, 9999);//企业内部标识单证的编号。 必填
            $orderlist['preNo'] = '';//电子口岸标识单证的编号。
            $orderlist['assureCode'] = $orderInfo['ebpCode'];//担保企业
            $orderlist['emsNo'] = 'T2385W000028';//清单编号
            $orderlist['invtNo'] = $type === 1 ? '': $orderInfo['invt_no'];//清单编号
            $orderlist['ieFlag'] = 'I';//订单类型(电子订单类型：I进口)
            $orderlist['declTime'] = $pushDate;//申报日期
            $orderlist['customsCode'] = 2385;//申报海关代码
            $orderlist['portCode'] = 2385;//口岸海关代码
            $orderlist['ieDate'] = $pushDate;//进口日期 可免填
            $orderlist['buyerIdType'] = 1;//订购人证件类型
            $orderlist['buyerIdNumber'] = $orderInfo['ConsigneeCode'];//订购人证件号码
            $orderlist['buyerName'] = $orderInfo['buyerName'];//订购人姓名
            $orderlist['buyerTelephone'] = $orderInfo['contactMobile'];//订购人电话
            $orderlist['consigneeAddress'] = $orderInfo['contactAddr'] . $orderInfo['detailAddr'];//收件地址
            $orderlist['agentCode'] = $orderInfo['ebpCode'];//申报企业代码
            $orderlist['agentName'] = $orderInfo['ebpName'];//申报企业名称
            $orderlist['areaCode'] = '3212660009';//区内企业代码
            $orderlist['areaName'] = '江苏华轩电子商务有限公司';//区内企业名称
            $orderlist['tradeMode'] = 1210;//贸易方式
            $orderlist['trafMode'] = 7;//运输方式 。直购进口指跨境段物流运输方式，保税进口指二线出区物流运输方式
            //$orderlist['trafNo'] = '';//运输工具编号 直购进口必填 保税进口免填
            //$orderlist['voyageNo'] = $orderInfo['flight_no'];//航班航次号 直购进口必填 保税进口免填
            //$orderlist['billNo'] = $orderInfo['get_bill_no'];//提运单号 直购进口必填 保税进口免填
            //$orderlist['loctNo'] = 2378;//监管场所代码 非必填
            //$orderlist['licenseNo'] = '';//许可证件号 非必填
            $orderlist['country'] = 142;//起运国（地区）
            $orderlist['freight'] = '0';//运费
            $orderlist['insuredFee'] = '0';//保费 物流企业实际收取的商品保价费用
            $orderlist['currency'] = 142;//币制
            //$orderlist['wrapType'] = '';//包装种类代码件数 非必填
            $orderlist['packNo'] = 1;//件数
            //$orderlist['note'] = '';//备注


            $orderlistArr = [];
            $netWeight = 0;
            $rough_weight = 0;
            foreach ($ordersonInfo as $k => $v) {
                //组合商品  包含商品编码和数量
                $v['num'] = (int)($v['num'] * $v['spec_qty']);
                $v['price'] = round($v['price'] / $v['spec_qty'], 2);

                $orderson = [];
                $orderson['gnum'] = $k + 1;//商品序号（从1开始的递增序号。）
                $orderson['itemRecordNo'] = $v['RecordMaterialNo'];//账册备案料号
                $orderson['itemNo'] = $v['barcode'];//企业商品货号（电商企业自定义的商品货号（SKU））
                $orderson['itemName'] = $v['productName'];//企业商品品名称（交易平台销售商品的中文名称）
                $orderson['gcode'] = $v['GCode'];//海关编码
                $orderson['gname'] = $v['productName'];//企业商品品名称（交易平台销售商品的中文名称）
                $orderson['gmodel'] = $v['GModel'];//商品规格型号
                $orderson['barCode'] = $v['barcode'];//条形码
                $orderson['country'] = $v['business_addr'];//原产国（地区）
                //$orderson['tradeCountry'] = 142;//贸易国
                $orderson['currency'] = 142;//币制（限定为人民币，填写“142”。）
                $orderson['qty'] = $v['num'];//数量（按成交计量单位的实际数量，精确到小数点后两位）
                $orderson['unit'] = $v['Unit'];//计量单位
                $orderson['qty1'] = $v['Qty1'] * $v['num'];//法定数量
                $orderson['unit1'] = $v['Unit1'];//法定计量单位
                $netWeight += $orderson['qty1'];
                $rough_weight += $v['rough_weight'] * $v['num'];
                if (!empty($v['Unit2'])) {
                    $orderson['qty2'] = $v['Qty2'] * $v['num'];//法定第二数量
                    $orderson['unit2'] = $v['Unit2'];//法定第二计量单位
                }

                $orderson['price'] = $v['price'];//单价
                $orderson['totalPrice'] = $v['num'] * $v['price'];//总价
                $orderson['note'] = '';//备注
                $orderlistArr[] = $orderson;
            }
            $orderlist['netWeight'] = $netWeight;//净重（公斤）
            $orderlist['grossWeight'] = $rough_weight;//毛重（公斤）
            $orderlist['orderlist'] = $orderlistArr;//子订单信息
            $orderArr[] = $orderlist;

        } else {
            return ['status' => 0, 'msg' => '订单' . $orderId . '信息已失效'];
        }


        return $this->clearOrderXml($orderArr, $guid, $orderId);
    }

    //海关订单xml文件
    public function orderXml($order, $guid, $orderId)
    {

        // $copCode = '3201968B31';//报文传输的企业代码（需要与接入客户端的企业身份一致）
        // $copName = '南京龙潭跨境贸易产业服务有限公司';//报文传输的企业名称（需要与接入客户端的企业身份一致）
        // $dxpMode = 'DXP';//默认为DXP；指中国电子口岸数据交换平台
        // //$dxpId = 'DXPENT0000012866';//向中国电子口岸数据中心申请数据交换平台的用户编号
        // $dxpId = 'DXPENT0000464003';//向中国电子口岸数据中心申请数据交换平台的用户编号
        $copCode = '3201960H68';//报文传输的企业代码（需要与接入客户端的企业身份一致）
        $copName = '南京东九区供应链管理有限公司';//报文传输的企业名称（需要与接入客户端的企业身份一致）
        $dxpMode = 'DXP';//默认为DXP；指中国电子口岸数据交换平台
        //$dxpId = 'DXPENT0000012866';//向中国电子口岸数据中心申请数据交换平台的用户编号
        $dxpId = 'DXPENT0000456978';//向中国电子口岸数据中心申请数据交换平台的用户编号


        $xml = new \DOMDocument('1.0', 'utf-8');//建立DOM对象
        $xml->formatOutput = true;
        $ceb = $xml->createElement('ceb:CEB311Message');
        $ceb = $xml->appendChild($ceb);


        $name3 = $xml->createAttribute('xmlns:ceb');
        $name3->value = 'http://www.chinaport.gov.cn/ceb';
        $ceb->appendChild($name3);

        // $name4 = $xml->createAttribute('xmlns:xsi');
        // $name4->value = 'http://www.w3.org/2001/XMLSchema-instance';
        // $ceb->appendChild($name4);

        $name1 = $xml->createAttribute('guid');
        $name1->value = $guid;
        $ceb->appendChild($name1);

        $name2 = $xml->createAttribute('version');
        $name2->value = '1.0';
        $ceb->appendChild($name2);

        foreach ($order as $key => $value) {
            //创建主单节点
            $Order = $ceb->appendChild($xml->createElement('ceb:Order'));
            $OrderHead = $Order->appendChild($xml->createElement('ceb:OrderHead'));

            $orderlist = $value['orderlist'];
            unset($value['orderlist']);
            //主单参数 除子订单之外的参数
            foreach ($value as $k => $vo) {
                //主单参数节点
                $order_obj = $OrderHead->appendChild($xml->createElement('ceb:' . $k));
                if ($vo != "") {
                    $order_obj->appendChild($xml->createTextNode($vo));
                }
            }

            //创建子单节点
            foreach ($orderlist as $k => $vo) {
                $OrderList = $Order->appendChild($xml->createElement('ceb:OrderList'));

                foreach ($vo as $p => $q) {
                    //子单参数节点
                    $list_obj = $OrderList->appendChild($xml->createElement('ceb:' . $p));
                    if ($q != "") {
                        $list_obj->appendChild($xml->createTextNode($q));
                    }
                }
            }
        }

        //基础报文传输实体节点
        $BaseTransfer = $ceb->appendChild($xml->createElement('ceb:BaseTransfer'));

        //报文传输的企业代码
        $Base_obj1 = $BaseTransfer->appendChild($xml->createElement('ceb:copCode'));
        $Base_obj1->appendChild($xml->createTextNode($copCode));
        //报文传输的企业名称
        $Base_obj2 = $BaseTransfer->appendChild($xml->createElement('ceb:copName'));
        $Base_obj2->appendChild($xml->createTextNode($copName));
        //默认为DXP；指中国电子口岸数据交换平台
        $Base_obj3 = $BaseTransfer->appendChild($xml->createElement('ceb:dxpMode'));
        $Base_obj3->appendChild($xml->createTextNode($dxpMode));
        //向中国电子口岸数据中心申请数据交换平台的用户编号
        $Base_obj4 = $BaseTransfer->appendChild($xml->createElement('ceb:dxpId'));
        if ($dxpId != "") {
            $Base_obj4->appendChild($xml->createTextNode($dxpId));
        }
        $xmlpath = "xml/taizhou311/".date('Y-m-d');
        $file = $xmlpath.'/'.$orderId.'-'.date("YmdHis").'.xml';
        if(!is_dir($xmlpath)) {
            mkdir($xmlpath,0755,true);
        }

        $result = $xml->save($file);//保存文件$orderId
        if ($result) {

            $res = $this->push($file);

            if ($res == 'True') {
                //修改推送状态
                foreach ($order as $key => $value) {
                    Db::table('db_customs_order')->where(['orderId' => $value['orderNo']])->save(['push_order'=>1,'customs_port'=>3,'modifyTime'=>date('Y-m-d H:i:s')]);

                }
                return ['status' => 1, 'msg' => '推送成功'];

            } else {
                return ['status' => 0, 'msg' => $res];
            }

        } else {
            return ['status' => 0, 'msg' => '保存XML文件失败'];
        }

    }

    //海关订单xml文件
    public function clearOrderXml($order, $guid, $orderId)
    {
        // $copCode = '3201968B31';//报文传输的企业代码（需要与接入客户端的企业身份一致）
        // $copName = '南京龙潭跨境贸易产业服务有限公司';//报文传输的企业名称（需要与接入客户端的企业身份一致）
        // $dxpMode = 'DXP';//默认为DXP；指中国电子口岸数据交换平台
        // //$dxpId = 'DXPENT0000012866';//向中国电子口岸数据中心申请数据交换平台的用户编号
        // $dxpId = 'DXPENT0000464003';//向中国电子口岸数据中心申请数据交换平台的用户编号
        $copCode = '3201960H68';//报文传输的企业代码（需要与接入客户端的企业身份一致）
        $copName = '南京东九区供应链管理有限公司';//报文传输的企业名称（需要与接入客户端的企业身份一致）
        $dxpMode = 'DXP';//默认为DXP；指中国电子口岸数据交换平台
        //$dxpId = 'DXPENT0000012866';//向中国电子口岸数据中心申请数据交换平台的用户编号
        $dxpId = 'DXPENT0000456978';//向中国电子口岸数据中心申请数据交换平台的用户编号

        $xml = new \DOMDocument('1.0', 'utf-8');//建立DOM对象
        $xml->formatOutput = true;
        $ceb = $xml->createElement('ceb:CEB621Message');
        $ceb = $xml->appendChild($ceb);
        $name1 = $xml->createAttribute('guid');
        $name1->value = $guid;
        $ceb->appendChild($name1);

        $name3 = $xml->createAttribute('xmlns:ceb');
        $name3->value = 'http://www.chinaport.gov.cn/ceb';
        $ceb->appendChild($name3);

        // $name4 = $xml->createAttribute('xmlns:xsi');
        // $name4->value = 'http://www.w3.org/2001/XMLSchema-instance';
        // $ceb->appendChild($name4);

        $name2 = $xml->createAttribute('version');
        $name2->value = '1.0';
        $ceb->appendChild($name2);
        foreach ($order as $key => $value) {
            //创建主单节点
            $Order = $ceb->appendChild($xml->createElement('ceb:Inventory'));
            $OrderHead = $Order->appendChild($xml->createElement('ceb:InventoryHead'));

            $orderlist = $value['orderlist'];
            unset($value['orderlist']);
            //主单参数 除子订单之外的参数
            foreach ($value as $k => $vo) {
                //主单参数节点
                $order_obj = $OrderHead->appendChild($xml->createElement('ceb:' . $k));
                if ($vo != "") {
                    $order_obj->appendChild($xml->createTextNode($vo));
                }
            }

            //创建子单节点
            foreach ($orderlist as $k => $vo) {
                $OrderList = $Order->appendChild($xml->createElement('ceb:InventoryList'));

                foreach ($vo as $p => $q) {
                    //子单参数节点
                    $list_obj = $OrderList->appendChild($xml->createElement('ceb:' . $p));
                    if ($q != "") {
                        $list_obj->appendChild($xml->createTextNode($q));
                    }
                }
            }
        }

        //基础报文传输实体节点
        $BaseTransfer = $ceb->appendChild($xml->createElement('ceb:BaseTransfer'));

        //报文传输的企业代码
        $Base_obj1 = $BaseTransfer->appendChild($xml->createElement('ceb:copCode'));
        $Base_obj1->appendChild($xml->createTextNode($copCode));
        //报文传输的企业名称
        $Base_obj2 = $BaseTransfer->appendChild($xml->createElement('ceb:copName'));
        $Base_obj2->appendChild($xml->createTextNode($copName));
        //默认为DXP；指中国电子口岸数据交换平台
        $Base_obj3 = $BaseTransfer->appendChild($xml->createElement('ceb:dxpMode'));
        $Base_obj3->appendChild($xml->createTextNode($dxpMode));
        //向中国电子口岸数据中心申请数据交换平台的用户编号
        $Base_obj4 = $BaseTransfer->appendChild($xml->createElement('ceb:dxpId'));
        if ($dxpId != "") {
            $Base_obj4->appendChild($xml->createTextNode($dxpId));
        }
        $xmlpath = "xml/taizhou621/".date('Y-m-d');
        $file = $xmlpath.'/'.$orderId.'-'.date("YmdHis").'.xml';
        if(!is_dir($xmlpath)) {
            mkdir($xmlpath,0755,true);
        }

        $result = $xml->save($file);//保存文件$orderId
        if ($result) {

            $res = $this->push($file);

            if ($res == 'True') {
                //修改推送状态
                foreach ($order as $key => $value) {
                    Db::table('db_customs_order')->where(['orderId' => $value['orderNo']])->save(['push_inventory'=>1,'modifyTime'=>date('Y-m-d H:i:s')]);

                }
                return ['status' => 1, 'msg' => '推送成功'];

            } else {
                return ['status' => 0, 'msg' => $res];
            }

        } else {
            return ['status' => 0, 'msg' => '保存XML文件失败'];
        }

    }

    //
    public function push($file)
    {
        $ch = curl_init();
        $data['data'] = base64_encode(file_get_contents($file));
        $url = 'http://218.90.227.227:8081/POSTWEB/Data.aspx';
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($ch);
        curl_close($ch);
        $this->writeLog('XML文件:' . $file . ';接口地址:' . $url . ';回执:' . $output);
        return $output;

    }

    /**
     * 写入日志
     * BASE_PATH 在入口文件设置
     */
    protected function writeLog($text)
    {
        $now = date('Y-m-d H:i:s');
        $ip = request()->ip();
        $log_path = "log/customs/taizhou/";
        $destination = $log_path.date('y_m_d').'.log';
        if(!is_dir($log_path)) {
            mkdir($log_path,0755,true);
        }
        error_log("[{$now}] ".$_SERVER['REMOTE_ADDR'].' '.$_SERVER['REQUEST_URI'].'  IP:'.$ip."\r\n{$text}\r\n", 3,$destination);
    }
}